package com.whfc.fse.dao;

import com.whfc.fse.dto.FseCraneDTO;
import com.whfc.fse.dto.OpenApiFseCraneDTO;
import com.whfc.fse.entity.FseCrane;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FseCraneMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(FseCrane record);

    int insertSelective(FseCrane record);

    FseCrane selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FseCrane record);

    int updateByPrimaryKey(FseCrane record);

    /**
     * 查询塔机列表
     *
     * @param deptId
     * @param keyword
     * @param bindFlag
     * @param netState
     * @return
     */
    List<FseCraneDTO> selectFseCraneByDeptId(@Param("deptId") Integer deptId,
                                             @Param("keyword") String keyword,
                                             @Param("bindFlag") Integer bindFlag,
                                             @Param("netState") Integer netState);

    /**
     * 查询塔机列表
     *
     * @param deptIds
     * @param bindFlag
     * @return
     */
    List<FseCraneDTO> selectFseCraneList(@Param("deptIds") List<Integer> deptIds, @Param("bindFlag") Integer bindFlag);

    /**
     * 查询塔机
     *
     * @param deptId
     * @param code
     * @return
     */
    FseCrane selectByDeptIdAndCode(@Param("deptId") Integer deptId, @Param("code") String code);

    /**
     * 逻辑删除
     *
     * @param id
     */
    void deleteLogicById(@Param("id") Integer id);

    /**
     * 更新硬件绑定状态
     *
     * @param craneId
     * @param platform
     * @param bindFlag
     * @param sn
     * @param netState
     */
    void updateBindFlag(@Param("craneId") Integer craneId,
                        @Param("platform") String platform,
                        @Param("bindFlag") Integer bindFlag,
                        @Param("sn") String sn,
                        @Param("netState") Integer netState);

    /**
     * 查找塔机数量
     *
     * @param deptIds
     * @param netState
     * @return
     */
    Integer countCraneNum(@Param("deptIds") List<Integer> deptIds,
                          @Param("netState") Integer netState);

    /**
     * 根据SN查找塔机
     *
     * @param platform 平台
     * @param sn       SN
     * @return 塔机
     */
    FseCrane selectByPlatformAndSn(@Param("platform") String platform,
                                   @Param("sn") String sn);

    /**
     * 更新所有塔机设备状态
     *
     * @param netState 网络状态
     */
    void updateAllDeviceNetState(@Param("netState") Integer netState);

    /**
     * 查询塔机列表
     *
     * @param deptId
     * @return
     */
    List<OpenApiFseCraneDTO> selectOpenApiFseCraneByDeptId(Integer deptId);

    /**
     * 查询塔机列表
     *
     * @param craneIds
     * @return
     */
    List<FseCrane> selectFseCraneListByCraneIds(@Param("craneIds") List<Integer> craneIds);

    /**
     * 更新监控
     *
     * @param craneId    塔机ID
     * @param fvsDevices 监控
     */
    void updateFvsDevices(@Param("craneId") Integer craneId,
                          @Param("fvsDevices") String fvsDevices);

    /**
     * 根据平台查找 设备SN
     *
     * @param platform 平台
     * @return sn
     */
    List<String> selectSnByPlatform(@Param("platform") String platform);

    List<FseCraneDTO> selectFseCraneByDeptIdAndPlatform(@Param("deptId")Integer deptId, @Param("platform")String platform);
}

